package com.sz.biz.logistics.bill.service;

import com.sz.common.base.dto.CommonModel;
import com.sz.common.base.dto.QResultDto;
import com.sz.common.base.dto.QueryParams;
import com.sz.biz.logistics.bill.entity.BillingTask;
import com.sz.biz.logistics.bill.entity.BillingTaskStatus;
import com.sz.biz.logistics.bill.dto.BillingDetailDto;
import com.sz.biz.logistics.bill.dto.BillingDto;
import com.sz.biz.logistics.bill.dto.BillingTaskQueryDto;

import java.util.List;

/**
 * Function: 账单任务服务 <br>
 * Author: jifeixing <br>
 * Date: 2017-05-17 14:09:00
 */

public interface BillingTaskService {

    /**
     * 确认生成账单提示信息
     *
     * @param billingTaskQueryDto
     * @return
     */
    BillingDto preGenerateBill(BillingTaskQueryDto billingTaskQueryDto);

    /**
     * 生成账单
     * @param billingTaskQueryDto
     * @return
     */
    String generateBill(BillingTaskQueryDto billingTaskQueryDto);
    /**
     * 重新生成账单
     * @param taskCodes
     */
    void regenerate(List<String> taskCodes,String type, List<Integer> suppliers);
    /**
     * 根据任务编码删除任务
     * @param taskCodes
     */
    void batchdeleteByTaskCode(List<String> taskCodes,String type);

    /**
     * 根据任务编码获取任务
     * @param taskCodes
     * @return
     */
    List<BillingTask> findByTaskCodes(List<String> taskCodes);

    /**
     * 根据任务编码获取任务
     * @param taskCode
     * @return
     */
    BillingTask findByTaskCode(String taskCode,String type);
    /**
     * 账单任务列表
     *
     * @param params
     * @return
     */
    QResultDto findBillingTaskList(QueryParams params);

    /**
     * 获取所有账单任务状态
     *
     * @return
     */
    List<CommonModel> getAllTaskStatus();

    /**
     * 更新账单任务
     * @param billingTask
     */
    void updateBillingTask(BillingTask billingTask);

    /**
     * 更新任务状态
     * @param taskStatus
     * @param taskCodes
     */
    void updateTaskStatus(BillingTaskStatus taskStatus, List<String> taskCodes,String type);

    /**
     * 账单任务详情
     * @param taskCode
     * @return
     */
    BillingDetailDto billingTaskDetail(String taskCode,String type);

    /**
     * 修改已经生成账单的客户数量和订单数量
     * @param taskCode
     * @param completeOrderQuantity
     */
    void updateTaskCustomerComplete(String taskCode, Integer completeOrderQuantity,String type);
}
